package cl.zeke.remoto.vista.managedbeans.gestionar_usuarios;

import cl.zeke.remoto.negocio.entities.Perfil;
import cl.zeke.remoto.negocio.entities.Usuario;
import cl.zeke.remoto.negocio.services.UsuarioService;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UsuarioLazyDataModel extends LazyDataModel<Usuario> {

    private static Logger log = LoggerFactory.getLogger(UsuarioLazyDataModel.class);
    
    private String nombres;
    private String apellidos;
    private Integer rut;
    private Perfil perfil;
    private UsuarioService usuarioService;
    private String email;
    private Date fechaNacimientoInferior;
    private Date fechaNacimientoSuperior;
    private Boolean habilitado;

    public void calcularRowCount() {
        int rowCount = usuarioService.buscarRowCount(nombres, apellidos, rut, perfil, email, fechaNacimientoInferior, fechaNacimientoSuperior, habilitado);
        this.setRowCount(rowCount);
    }
    
    @Override
    public List<Usuario> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
        log.trace("llamando a load. rowCount: " + getRowCount());
        int fin = first + pageSize;
        if (fin > getRowCount()) {
            fin = getRowCount();
        }
        if(first > fin) {
            first = fin;
        }
        List<Usuario> list;
        
        list = usuarioService.buscar(
                nombres, 
                apellidos, 
                rut, 
                perfil, 
                email, 
                fechaNacimientoInferior, 
                fechaNacimientoSuperior,
                habilitado,
                first,
                fin);
        
        log.trace("size usuarios: " +  list.size());
        
        return list;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public void setRut(Integer rut) {
        this.rut = rut;
    }

    public void setPerfil(Perfil perfil) {
        this.perfil = perfil;
    }

    public void setUsuarioService(UsuarioService usuarioService) {
        this.usuarioService = usuarioService;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setFechaNacimientoInferior(Date fechaNacimientoInferior) {
        this.fechaNacimientoInferior = fechaNacimientoInferior;
    }

    public void setFechaNacimientoSuperior(Date fechaNacimientoSuperior) {
        this.fechaNacimientoSuperior = fechaNacimientoSuperior;
    }

    public void setHabilitado(Boolean habilitado) {
        this.habilitado = habilitado;
    }
    
}
